<?php

/**---------------------------------------------
 *  文件相关函数
 * ---------------------------------------------
 */
if (!function_exists('base64DecImg')) {
    /**
     * 反编译data/base64数据流并创建图片文件
     * @author Yiyuan-Lin
     * @param string $baseData  data/base64数据流
     * @param string $dir 存放图片文件目录
     * @param string $fileName   图片文件名称(不含文件后缀)
     * @return mixed 返回新创建文件路径或布尔类型
     */
    function base64DecImg($baseData, $dir = '', $fileName = ''){
        $expData = explode(';', $baseData);
        $postfix   = explode('/', $expData[0]);
        if(strstr($postfix[0], 'image') ){
            if(!is_readable($dir)) mkdir($dir, 0700);
            $postfix   = $postfix[1] == 'jpeg' ? 'jpg' : $postfix[1];
            $storageDir = $dir . $fileName . '.' . $postfix;
            $export = base64_decode(str_replace("{$expData[0]};base64,", '', $baseData));
            file_put_contents($storageDir, $export);
            return [
                'storage_dir' => $storageDir,
                'ext' => $postfix,
            ];
        }
    }
}
if (!function_exists('checkFileExists')) {
    /**
     * 检查文件是否存在
     *
     * @param $file
     * @return bool
     */
    function checkFileExists($file)
    {
        // 远程文件
        if (strtolower(substr($file, 0, 5)) == 'https') {
            // 远程文件
            $header = get_headers($file, true);
            return isset($header[0]) && (strpos($header[0], '200') || strpos($header[0], '304'));

        } elseif (strtolower(substr($file, 0, 4)) == 'http') {
            // 远程文件
            $header = get_headers($file, true);
            return isset($header[0]) && (strpos($header[0], '200') || strpos($header[0], '304'));
        } else {
            // 本地文件
            return file_exists($file);
        }
    }
}
if (!function_exists('getExtByFile')) {
    /**
     * 获取文件后缀
     * @param $file
     * @return mixed|string|string[]
     */
    function getExtByFile($file)
    {
        return pathinfo($file, PATHINFO_EXTENSION);
    }
}
if (!function_exists('byteConversion')) {
    /**
     * 将字节大小转换相对应单位
     *
     * @param int $num
     * @return string
     */
    function byteConversion($num)
    {
        $p      = 0;
        $format = 'bytes';
        if ($num > 0 && $num < 1024) {
            $p = 0;
            return number_format($num) . ' ' . $format;
        }
        if ($num >= 1024 && $num < pow(1024, 2)) {
            $p      = 1;
            $format = 'KB';
        }
        if ($num >= pow(1024, 2) && $num < pow(1024, 3)) {
            $p      = 2;
            $format = 'MB';
        }
        if ($num >= pow(1024, 3) && $num < pow(1024, 4)) {
            $p      = 3;
            $format = 'GB';
        }
        if ($num >= pow(1024, 4) && $num < pow(1024, 5)) {
            $p      = 3;
            $format = 'TB';
        }
        $num /= pow(1024, $p);
        return number_format($num, 3) . ' ' . $format;
    }
}
